package org.example.pinda.base;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 基础控制器
 *
 * @author ryan fawcett
 * @see CommonResult
 */
public abstract class BaseController {

    @Resource
    protected HttpServletRequest request;

    @Resource
    protected HttpServletResponse response;

    /**
     * 当前页
     */
    protected static final String CURRENT = "current";
    /**
     * 每页显示条数
     */
    protected static final String SIZE = "size";
    /**
     * 升序排序字段
     */
    protected static final String PAGE_ASC = "ascs";
    /**
     * 降序排序字段
     */
    protected static final String PAGE_DESC = "desc";
    /**
     * 查询开始时间
     */
    protected static final String START_CREATE_TIME = "startCreateTime";
    /**
     * 查询结束时间
     */
    protected static final String END_CREATE_TIME = "endCreateTime";
    /**
     * 默认页码
     */
    protected int DEFAULT_PAGE = 1;
    /**
     * 默认每页显示条数
     */
    protected int DEFAULT_LIMIT = 20;
    /**
     * 每页最大显示条数
     */
    protected int MAX_LIMIT = 10000;

    /**
     * 返回成功
     *
     * @param data 成功返回的数据
     * @param <T>  数据的类型
     * @return 通用返回对象
     * @see CommonResult#success(Object)
     */
    public <T> CommonResult<T> success(T data) {
        return CommonResult.success(data);
    }

    /**
     * 返回失败信息
     *
     * @param msg 提示信息
     * @param <T> 数据类型
     * @return 失败的通用返回对象
     * @see CommonResult#fail(String)
     */
    public <T> CommonResult<T> fail(String msg) {
        return CommonResult.fail(msg);
    }

    /**
     * 返回失败信息
     *
     * @param msg  提示信息
     * @param args 错误参数
     * @param <T>  数据类型
     * @return 失败的通用返回对象
     * @see CommonResult#fail(String, Object...)
     */
    public <T> CommonResult<T> fail(String msg, Object... args) {
        return CommonResult.fail(msg, args);
    }

    /**
     * 获取当前用户ID
     *
     * @return 用户ID
     */
    public Long getUserId() {
        return 0L;
    }

}
